from typing import Dict, Any
from .base_agent import BaseAgent
from utils import logger

class ArchitectAgent(BaseAgent):
    """架构师代理 - 负责系统设计和架构规划"""
    
    def __init__(self):
        super().__init__(
            name="架构师",
            role="系统架构师和技术专家"
        )
    
    def _get_system_prompt(self) -> str:
        return """你是一个资深的系统架构师，具有以下专业技能：

🏗️ **核心职责**：
- 设计可扩展、可维护的系统架构
- 选择合适的技术栈和设计模式
- 制定代码结构和模块划分
- 考虑性能、安全性和可维护性

📐 **设计原则**：
- SOLID原则（单一职责、开闭原则等）
- DRY原则（Don't Repeat Yourself）
- KISS原则（Keep It Simple, Stupid）
- 关注点分离
- 高内聚、低耦合

🛠️ **技术选型**：
- 根据需求特点选择最适合的技术栈
- 考虑团队技能和项目复杂度
- 平衡开发效率和系统性能
- 前瞻性技术选择

📊 **输出内容**：
- 系统架构图
- 模块设计和接口定义
- 技术栈选择说明
- 文件目录结构
- 开发规范和标准

请用中文回复，注重技术的合理性和实用性。"""
    
    def process(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
        """设计系统架构"""
        requirement_analysis = input_data.get('requirement_analysis', '')
        original_requirement = input_data.get('original_requirement', input_data.get('user_input', ''))
        
        if not requirement_analysis and not original_requirement:
            return {
                'success': False,
                'error': '未提供需求分析或原始需求'
            }
        
        # 构造架构设计提示
        prompt = f"""
基于以下需求分析，设计系统架构：

**原始需求**：
{original_requirement}

**需求分析**：
{requirement_analysis}

**请设计完整的系统架构，包括**：

## 1. 技术栈选择
- 后端语言和框架
- 前端技术（如果需要）
- 数据库选择
- 第三方库和工具
- 选择理由

## 2. 系统架构
- 整体架构模式（如MVC、微服务等）
- 核心模块划分
- 模块间交互方式
- 数据流向

## 3. 目录结构
```
project_name/
├── 模块1/
├── 模块2/
└── ...
```

## 4. 核心类和接口设计
- 主要类的职责
- 关键接口定义
- 数据模型

## 5. 非功能性需求
- 性能考虑
- 安全性设计
- 可扩展性规划
- 错误处理策略

## 6. 开发规范
- 编码规范
- 命名约定
- 文档要求

请提供详细的设计方案和实现思路。
"""
        
        try:
            architecture_design = self._call_llm(prompt)
            
            return {
                'success': True,
                'architecture_design': architecture_design,
                'summary': '系统架构设计完成'
            }
            
        except Exception as e:
            logger.error(f"架构设计失败: {e}")
            return {
                'success': False,
                'error': str(e),
                'summary': '架构设计失败'
            }
    
    def design_database(self, requirement: str) -> str:
        """设计数据库结构"""
        prompt = f"""
基于以下需求，设计数据库结构：

需求：{requirement}

请提供：
1. 数据库类型选择（关系型/NoSQL/图数据库等）
2. 表结构设计（字段、类型、约束）
3. 索引设计
4. 数据关系图
5. 查询优化建议

使用标准的SQL DDL语句定义表结构。
"""
        
        return self._call_llm(prompt)
    
    def create_api_specification(self, requirement: str) -> str:
        """创建API规范"""
        prompt = f"""
基于以下需求，设计RESTful API规范：

需求：{requirement}

请提供：
1. 资源定义
2. 端点设计（GET、POST、PUT、DELETE）
3. 请求/响应格式
4. 状态码定义
5. 认证和授权机制
6. 错误处理规范

使用OpenAPI 3.0格式描述。
"""
        
        return self._call_llm(prompt) 